#include "stdio.h"
#include "stdlib.h"
#include "assert.h"
#include "err.h"
#include "bool.h"
#include "vuvuzela.h"

/* Estructura del TAD */
struct svuvuzela{
	char ** datos;
        int max_tam;
};

/* Constructor del TAD */
vuvuzela vuvu_create(int max){
	vuvuzela vuvu;
	FILE* archivo;
	int i, nodo;

	vuvu = (vuvuzela)calloc(1,sizeof(struct svuvuzela));
	vuvu->datos = (char**)calloc(max,sizeof(char*));
        vuvu->max_tam = max;

	if(vuvu == NULL) errx(EXIT_FAILURE,"No hay memoria disponible");
	if(vuvu->datos == NULL) errx(EXIT_FAILURE,"No hay memoria disponible");

	archivo = fopen("map_labels","r");
	fscanf(archivo, "Referencia        Ciudad");
	fgetc(archivo);
	fscanf(archivo, "==============================");
	fgetc(archivo);

	for(i=0;i<max;i++){
		vuvu->datos[i] = (char*)calloc(100,sizeof(char));
		if(vuvu->datos[i] == NULL) errx(EXIT_FAILURE,"No hay memoria disponible");
		fscanf(archivo, "%d %[^\n]",&nodo,vuvu->datos[i]);
		fgetc(archivo);
	}

	fclose(archivo);
	return vuvu;
}

/* Retorna el array del TAD */
char** vuvu_datos(vuvuzela vuvu){
	assert(vuvu != NULL);
	return vuvu->datos;
}

/* Destructor del TAD */
vuvuzela vuvu_destroy(vuvuzela vuvu){
        int i;
        assert(vuvu != NULL);
        assert(vuvu->datos != NULL);
        for (i = 0; i < vuvu->max_tam; i++){
                free(vuvu->datos[i]);
                vuvu->datos[i] = NULL;
        }
        free(vuvu->datos);
        vuvu->datos = NULL;
        free(vuvu);
        vuvu = NULL;
        return vuvu;
}
